import requests
from Common.handle_config import conf
from Common.handle_log import logger


def send_request(method,url,data=None,token=None):
    logger.info("发起一次HTTP请求")

    data=__handle_data(data)
    url=__pre_url(url)
    headers=__handle_header(token)

    # 将请求数据转换成字典对象。
    logger.info("请求头为：{}".format(headers))
    logger.info("请求方法为：{}".format(method))
    logger.info("请求url为：{}".format(url))
    logger.info("请求数据为：{}".format(data))

    method=method.upper()# 大写处理

    # 根据请求类型，调用请求方法
    if method=="GET":
        resp=requests.get(url=url,data=data,headers=headers)
    else:
        resp=requests.post(url=url,json=data,headers=headers)
    return resp

def __pre_url(url):
    """
    拼接接口的url地址。
    """
    base_url = conf.get("server", "base_url")
    url = url.strip()
    if url.startswith("/"):
        return base_url + url
    else:
        return base_url + "/" + url


def __handle_header(token=None):
    """
    处理请求头。加上项目当中必带的请求头。如果有token，加上token。
    :param token: token值
    :return: 处理之后headers字典
    """
    headers = {"X-Lemonban-Media-Type": "lemonban.v2",
               "Content-Type": "application/json"}
    if token:
        headers["Authorization"] = "Bearer {}".format(token)
    return headers

def __handle_data(data):
    """
    1.python中没有null，需要转换为None
    2.如果data是字符串，则转换成字典对象。
    """
    if data is not None and isinstance(data,str):
        # 如果有null，则替换为None
        if data.find("null")!=-1:
            data=data.replace("null","None")
        # 使用eval转成字典.eval过程中，如果表达式有涉及计算，会自动计算。
        data=eval(data)
        return data



if __name__ == '__main__':
    # url = "/member/register"
    # print(pre_url(url))
    # url1 = ""
    # print(pre_url(url1))
    # url2 = "member/register"
    # print(pre_url(url2))
    # str="null"
    # print(eval(str))
    resp=sent_request("GET","")
    print(resp.json())
